package com.merry.ConversionService;

import org.springframework.core.convert.TypeDescriptor;
import org.springframework.lang.Nullable;

/**
 * 一个类型转换的接口，调用 {@link #convert(Object, Class)} 方法，执行一个线程安全的转化服务。
 */
public interface ConversionService {

    /**
     * 判断一下是否可以转换。
     * sourceType是源类型，targetType是目标类型。
     */
    boolean canConvert(@Nullable Class<?> sourceType, Class<?> targetType);

    /**
     * 判断是否可以转换。
     */
    boolean canConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType);

    /**
     * 执行转换的方法。
     */
    @Nullable
    <T> T convert(@Nullable Object source, Class<T> targetType);

    /**
     * 执行转换的方法。
     */
    @Nullable
    Object convert(@Nullable Object source, @Nullable TypeDescriptor sourceType, TypeDescriptor targetType);

}
